Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 当前选中的登录选项卡
    currentTab: "phone",

    // 手机登录相关
    countryCode: "86",
    phone: "",
    password: "",
    captcha: "",
    loginMethod: "password", // password 或 captcha
    showPassword: false,
    captchaDisabled: false,
    captchaText: "获取验证码",
    captchaTimer: 60,

    // 邮箱登录相关
    email: "",

    // 二维码登录相关
    qrCodeUrl: "",
    qrCodeKey: "",
    qrCodeStatus: "等待扫码",
    qrCodeCheckTimer: null,

    // 按钮状态
    canLogin: false,
    canEmailLogin: false,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 如果有传递默认选中的tab
    if (options.tab) {
      this.setData({
        currentTab: options.tab,
      });
    }

    // 如果是二维码登录，立即生成二维码
    if (this.data.currentTab === "qrcode") {
      this.generateQRCode();
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 如果是二维码登录，开始轮询检查状态
    if (this.data.currentTab === "qrcode" && this.data.qrCodeKey) {
      this.startQRCodeCheck();
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    // 清除二维码检查定时器
    this.clearQRCodeCheckTimer();
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // 清除二维码检查定时器
    this.clearQRCodeCheckTimer();
  },

  /**
   * 切换登录选项卡
   */
  switchTab: function (e) {
    const tab = e.currentTarget.dataset.tab;
    this.setData({
      currentTab: tab,
    });

    // 如果切换到二维码登录，生成二维码
    if (tab === "qrcode" && !this.data.qrCodeUrl) {
      this.generateQRCode();
    } else if (tab !== "qrcode") {
      // 如果切换到其他登录方式，清除二维码检查定时器
      this.clearQRCodeCheckTimer();
    }
  },

  /**
   * 手机号输入
   */
  onPhoneInput: function (e) {
    this.setData({
      phone: e.detail.value,
    });
    this.checkLoginButtonStatus();
  },

  /**
   * 密码输入
   */
  onPasswordInput: function (e) {
    this.setData({
      password: e.detail.value,
    });
    this.checkLoginButtonStatus();
  },

  /**
   * 验证码输入
   */
  onCaptchaInput: function (e) {
    this.setData({
      captcha: e.detail.value,
    });
    this.checkLoginButtonStatus();
  },

  /**
   * 邮箱输入
   */
  onEmailInput: function (e) {
    this.setData({
      email: e.detail.value,
    });
    this.checkEmailLoginButtonStatus();
  },

  /**
   * 切换密码显示/隐藏
   */
  togglePasswordVisibility: function () {
    this.setData({
      showPassword: !this.data.showPassword,
    });
  },

  /**
   * 切换登录方式（密码/验证码）
   */
  switchLoginMethod: function () {
    this.setData({
      loginMethod:
        this.data.loginMethod === "password" ? "captcha" : "password",
      captcha: "", // 清空验证码
      password: "", // 清空密码
    });
    this.checkLoginButtonStatus();
  },

  /**
   * 显示国家代码选择器
   */
  showCountryCodePicker: function () {
    // 这里可以显示一个弹窗让用户选择国家代码
    // 简化处理，先只支持中国(+86)
    wx.showActionSheet({
      itemList: ["中国 +86"],
      success: (res) => {
        if (res.tapIndex === 0) {
          this.setData({
            countryCode: "86",
          });
        }
      },
    });
  },

  /**
   * 发送验证码
   */
  sendCaptcha: function () {
    // 如果按钮被禁用，直接返回
    if (this.data.captchaDisabled) {
      return;
    }

    // 检查手机号是否有效
    if (!this.data.phone || this.data.phone.length !== 11) {
      wx.showToast({
        title: "请输入有效的手机号",
        icon: "none",
      });
      return;
    }

    // 发送验证码请求
    wx.showLoading({
      title: "发送中...",
    });

    const that = this;
    wx.request({
      url: "https://smartsound.top/captcha/sent",
      method: "GET",
      data: {
        phone: that.data.phone,
        ctcode: that.data.countryCode,
        timestamp: Date.now(), // 添加时间戳防止缓存
      },
      header: {
        "content-type": "application/json",
      },
      success: function (res) {
        wx.hideLoading();
        console.log("验证码发送结果:", res.data);
        if (res.data && res.data.code === 200) {
          // 发送成功，开始倒计时
          wx.showToast({
            title: "验证码已发送",
            icon: "success",
          });
          that.startCaptchaCountdown();
        } else {
          // 发送失败
          wx.showToast({
            title: res.data.msg || "验证码发送失败",
            icon: "none",
          });
        }
      },
      fail: function (err) {
        console.error("验证码发送失败:", err);
        wx.hideLoading();
        wx.showToast({
          title: "网络错误，请稍后再试",
          icon: "none",
        });
      },
    });
  },

  /**
   * 开始验证码倒计时
   */
  startCaptchaCountdown: function () {
    this.setData({
      captchaDisabled: true,
      captchaText: `${this.data.captchaTimer}s`,
    });

    const countdownInterval = setInterval(() => {
      let timer = this.data.captchaTimer - 1;

      if (timer <= 0) {
        // 倒计时结束
        clearInterval(countdownInterval);
        this.setData({
          captchaDisabled: false,
          captchaText: "获取验证码",
          captchaTimer: 60,
        });
      } else {
        this.setData({
          captchaTimer: timer,
          captchaText: `${timer}s`,
        });
      }
    }, 1000);
  },

  /**
   * 检查登录按钮状态
   */
  checkLoginButtonStatus: function () {
    let canLogin = false;

    if (this.data.loginMethod === "password") {
      // 密码登录：手机号和密码都不为空
      canLogin =
        this.data.phone.length === 11 && this.data.password.length >= 6;
    } else {
      // 验证码登录：手机号和验证码都不为空
      canLogin = this.data.phone.length === 11 && this.data.captcha.length >= 4;
    }

    this.setData({
      canLogin: canLogin,
    });
  },

  /**
   * 检查邮箱登录按钮状态
   */
  checkEmailLoginButtonStatus: function () {
    // 简单的邮箱格式验证
    const emailPattern = /^[a-zA-Z0-9_-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z0-9_-]+$/;
    const isValidEmail = emailPattern.test(this.data.email);

    this.setData({
      canEmailLogin: isValidEmail && this.data.password.length >= 6,
    });
  },

  /**
   * 手机号登录
   */
  loginByPhone: function () {
    if (!this.data.canLogin) {
      return;
    }

    wx.showLoading({
      title: "登录中...",
    });

    const that = this;
    let requestData = {
      phone: that.data.phone,
      countrycode: that.data.countryCode,
      timestamp: Date.now(), // 添加时间戳防止缓存
    };

    // 根据登录方式添加不同的参数
    if (that.data.loginMethod === "password") {
      requestData.password = that.data.password;
    } else {
      requestData.captcha = that.data.captcha;
    }

    console.log("登录请求参数:", requestData);

    wx.request({
      url: "https://smartsound.top/login/cellphone",
      method: "POST", // 改为POST请求，避免密码和验证码通过URL传递
      data: requestData,
      header: {
        "content-type": "application/x-www-form-urlencoded", // 使用表单格式
      },
      success: function (res) {
        wx.hideLoading();
        console.log("登录结果:", res.data);

        if (res.data && res.data.code === 200) {
          // 登录成功，保存cookie和用户信息
          that.handleLoginSuccess(res.data);
        } else {
          // 登录失败
          wx.showToast({
            title: res.data.msg || "登录失败",
            icon: "none",
          });
        }
      },
      fail: function (err) {
        console.error("登录请求失败:", err);
        wx.hideLoading();
        wx.showToast({
          title: "网络错误，请稍后再试",
          icon: "none",
        });
      },
    });
  },

  /**
   * 邮箱登录
   */
  loginByEmail: function () {
    if (!this.data.canEmailLogin) {
      return;
    }

    wx.showLoading({
      title: "登录中...",
    });

    const that = this;
    wx.request({
      url: "https://smartsound.top/login",
      method: "POST", // 改为POST请求
      data: {
        email: that.data.email,
        password: that.data.password,
        timestamp: Date.now(), // 添加时间戳防止缓存
      },
      header: {
        "content-type": "application/x-www-form-urlencoded", // 使用表单格式
      },
      success: function (res) {
        wx.hideLoading();
        console.log("邮箱登录结果:", res.data);

        if (res.data && res.data.code === 200) {
          // 登录成功，保存cookie和用户信息
          that.handleLoginSuccess(res.data);
        } else {
          // 登录失败
          wx.showToast({
            title: res.data.msg || "登录失败",
            icon: "none",
          });
        }
      },
      fail: function (err) {
        console.error("邮箱登录请求失败:", err);
        wx.hideLoading();
        wx.showToast({
          title: "网络错误，请稍后再试",
          icon: "none",
        });
      },
    });
  },

  /**
   * 生成二维码
   */
  generateQRCode: function () {
    const that = this;

    // 显示加载状态
    this.setData({
      qrCodeStatus: "正在生成二维码...",
    });

    console.log("开始生成二维码");

    // 先获取二维码key
    wx.request({
      url: "https://smartsound.top/login/qr/key",
      method: "GET",
      data: {
        timestamp: Date.now(),
      },
      success: function (res) {
        console.log("二维码key获取结果:", res.data);

        if (
          res.data &&
          res.data.code === 200 &&
          res.data.data &&
          res.data.data.unikey
        ) {
          // 获取key成功，生成二维码
          const qrKey = res.data.data.unikey;
          console.log("获取到二维码key:", qrKey);

          that.setData({
            qrCodeKey: qrKey,
            qrCodeStatus: "正在生成二维码图片...",
          });

          // 用key生成二维码
          wx.request({
            url: "https://smartsound.top/login/qr/create",
            method: "GET",
            data: {
              key: qrKey,
              qrimg: 1,
              timestamp: Date.now(),
            },
            success: function (qrRes) {
              console.log("二维码生成结果:", qrRes.data);

              if (qrRes.data && qrRes.data.code === 200 && qrRes.data.data) {
                let qrImageUrl = "";

                // 尝试获取二维码图片
                if (qrRes.data.data.qrimg) {
                  qrImageUrl = qrRes.data.data.qrimg;
                } else if (qrRes.data.data.qrurl) {
                  // 如果没有qrimg但有qrurl，可以使用第三方API生成二维码
                  qrImageUrl =
                    "https://api.qrserver.com/v1/create-qr-code/?size=280x280&data=" +
                    encodeURIComponent(qrRes.data.data.qrurl);
                }

                if (qrImageUrl) {
                  // 获取二维码图片成功
                  console.log("二维码图片URL:", qrImageUrl);

                  that.setData({
                    qrCodeUrl: qrImageUrl,
                    qrCodeStatus: "等待扫码",
                  });

                  // 开始轮询检查二维码状态
                  that.startQRCodeCheck();
                } else {
                  console.error("二维码数据中没有图片链接");
                  that.handleQRCodeError();
                }
              } else {
                console.error("二维码生成响应异常:", qrRes.data);
                that.handleQRCodeError();
              }
            },
            fail: function (err) {
              console.error("二维码生成请求失败:", err);
              that.handleQRCodeError();
            },
          });
        } else {
          console.error("二维码key获取失败:", res.data);
          that.handleQRCodeError();
        }
      },
      fail: function (err) {
        console.error("二维码key请求失败:", err);
        that.handleQRCodeError();
      },
    });
  },

  /**
   * 处理二维码错误
   */
  handleQRCodeError: function () {
    this.setData({
      qrCodeUrl: "",
      qrCodeStatus: "二维码生成失败，请点击刷新",
    });

    wx.showToast({
      title: "二维码生成失败",
      icon: "none",
    });
  },

  /**
   * 开始轮询检查二维码状态
   */
  startQRCodeCheck: function () {
    // 先清除之前的定时器
    this.clearQRCodeCheckTimer();

    const that = this;
    this.data.qrCodeCheckTimer = setInterval(() => {
      if (!that.data.qrCodeKey) {
        // 如果没有key，停止检查
        that.clearQRCodeCheckTimer();
        return;
      }

      wx.request({
        url: "https://smartsound.top/login/qr/check",
        method: "GET",
        data: {
          key: that.data.qrCodeKey,
          timestamp: Date.now(),
          noCookie: true, // 添加noCookie参数，解决扫码返回502的问题
        },
        success: function (res) {
          console.log("二维码状态检查结果:", res.data);

          if (res.data) {
            switch (res.data.code) {
              case 800:
                // 二维码过期
                that.setData({
                  qrCodeStatus: "二维码已过期，请点击刷新",
                });
                that.clearQRCodeCheckTimer();
                break;
              case 801:
                // 等待扫码
                that.setData({
                  qrCodeStatus: "等待扫码",
                });
                break;
              case 802:
                // 待确认
                that.setData({
                  qrCodeStatus: "扫码成功，请在手机上确认",
                });
                break;
              case 803:
                // 授权登录成功 - 即使返回的数据不完整，也视为登录成功
                that.clearQRCodeCheckTimer();

                // 检查是否有cookie
                if (res.data.cookie) {
                  console.log("二维码登录成功，有cookie");
                  that.handleLoginSuccess(res.data);
                } else {
                  console.log("二维码登录成功，但无cookie，创建临时登录状态");
                  // 即使没有cookie也创建登录状态
                  wx.setStorageSync("isNetEaseLoggedIn", true);

                  // 创建临时用户信息
                  const tempUserInfo = {
                    userId: Date.now(),
                    nickname: "网易云用户",
                    avatarUrl: "/assets/netease-logo.png",
                  };
                  wx.setStorageSync("netease_user_info", tempUserInfo);

                  wx.showToast({
                    title: "登录成功",
                    icon: "success",
                    duration: 2000,
                    success: function () {
                      setTimeout(() => {
                        wx.navigateBack();
                      }, 1500);
                    },
                  });
                }
                break;
              default:
                // 其他状态
                console.log("未处理的二维码状态码:", res.data.code);
                break;
            }
          }
        },
        fail: function (err) {
          console.error("二维码状态检查失败:", err);
        },
      });
    }, 2000); // 改为每2秒检查一次
  },

  /**
   * 清除二维码检查定时器
   */
  clearQRCodeCheckTimer: function () {
    if (this.data.qrCodeCheckTimer) {
      clearInterval(this.data.qrCodeCheckTimer);
      this.setData({
        qrCodeCheckTimer: null,
      });
    }
  },

  /**
   * 刷新二维码
   */
  refreshQRCode: function () {
    this.setData({
      qrCodeUrl: "",
      qrCodeKey: "",
    });
    this.generateQRCode();
  },

  /**
   * 处理登录成功
   */
  handleLoginSuccess: function (data) {
    console.log("处理登录成功数据:", data);

    // 二维码登录的情况特殊处理
    if (this.data.currentTab === "qrcode") {
      if (data.code === 803) {
        // 二维码登录成功
        console.log("二维码登录成功，保存登录状态");

        // 即使没有完整信息也标记为已登录，因为API限制
        wx.setStorageSync("isNetEaseLoggedIn", true);

        // 尝试提取cookie
        if (data.cookie) {
          wx.setStorageSync("netease_cookie", data.cookie);
        }

        // 创建临时用户信息对象
        const tempUserInfo = {
          userId: data.account?.id || Date.now(),
          nickname:
            data.profile?.nickname || data.account?.userName || "网易云用户",
          avatarUrl: data.profile?.avatarUrl || "/assets/netease-logo.png",
        };

        wx.setStorageSync("netease_user_info", tempUserInfo);

        wx.showToast({
          title: "登录成功",
          icon: "success",
          duration: 2000,
          success: function () {
            setTimeout(() => {
              wx.navigateBack();
            }, 1500);
          },
        });

        return;
      }
    }

    // 常规登录情况处理
    // 保存cookie
    if (data.cookie) {
      wx.setStorageSync("netease_cookie", data.cookie);
      console.log("已保存网易云cookie");
    } else {
      console.log("数据中没有cookie");
      // 尝试从其他字段提取cookie
      if (data.token) {
        const tempCookie = `MUSIC_U=${data.token}`;
        wx.setStorageSync("netease_cookie", tempCookie);
        console.log("已从token创建临时cookie:", tempCookie);
      }
    }

    // 保存用户信息
    if (data.profile) {
      wx.setStorageSync("netease_user_info", data.profile);
      console.log("已保存网易云用户信息");

      // 标记为已登录
      wx.setStorageSync("isNetEaseLoggedIn", true);

      wx.showToast({
        title: "登录成功",
        icon: "success",
        duration: 2000,
        success: function () {
          // 延迟返回，让用户看到成功提示
          setTimeout(() => {
            // 返回上一页
            wx.navigateBack();
          }, 1500);
        },
      });
    } else if (data.account) {
      // 某些登录方式可能不返回profile而是返回account
      const userInfo = {
        userId: data.account.id,
        nickname: data.account.userName || "网易云用户",
        avatarUrl: data.account.avatarUrl || "/assets/netease-logo.png",
      };

      wx.setStorageSync("netease_user_info", userInfo);
      console.log("已从account创建并保存用户信息");

      // 标记为已登录
      wx.setStorageSync("isNetEaseLoggedIn", true);

      wx.showToast({
        title: "登录成功",
        icon: "success",
        duration: 2000,
        success: function () {
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        },
      });
    } else {
      console.log("登录信息不完整");
      wx.showToast({
        title: "登录信息不完整，请重试",
        icon: "none",
      });
    }
  },
});
